package com.xjl.disruptor.quickstart;

import com.lmax.disruptor.RingBuffer;

import java.nio.ByteBuffer;

/**
 * 订单生产者
 * @author xiaojinlu1990@163.com
 * date 2019-12-30
 */
public class OrderEventProducer {
    private RingBuffer<EvenOrder> ringBuffer;

    public  OrderEventProducer(RingBuffer<EvenOrder> ringBuffer) {
        this.ringBuffer = ringBuffer;
    }

   public void sendData(ByteBuffer data){
       //1 在生产者发送消息的时候, 首先 需要从我们的ringBuffer里面 获取一个可用的序号
       long sequence = ringBuffer.next();	//0
       try {
           //2 根据这个序号, 找到具体的 "OrderEvent" 元素 注意:此时获取的OrderEvent对象是一个没有被赋值的"空对象"
           EvenOrder event = ringBuffer.get(sequence);
           //3 进行实际的赋值处理
           event.setValue(String.valueOf(data.getLong(0)));//;
       } finally {
           //4 提交发布操作
           ringBuffer.publish(sequence);
       }

    }
}
